// 菜品相关的路由表

// 导入模块
let foodModel = require('../db/models/foodModel')

// 创建路由表(空表)
let router = require('express').Router()

// 向路由表中添加内容:

/**
 * @api {post} /food/add 添加菜品
 * @apiGroup food
 *
 * @apiParam {String} name 菜品名称
 * @apiParam {String} desc 菜品描述
 * @apiParam {String} price 菜品价格
 * @apiParam {String} imgurl 菜品图片
 * @apiParam {String} type 菜品类型
 *
 * @apiSuccessExample 返回数据示例:
 * {
 *     "code": 1,
 *     "msg": "添加成功"
 * }
 */
router.post('/add',(req,res)=>{
    // 获取前端传递的参数
    let {name,desc,price,type,imgurl} = req.body
    // 先查询数据库是否已有要添加的菜品
    foodModel.find({name})
    .then((arr)=>{
        if (arr.length === 0) {
            // 可以添加数据
            return foodModel.insertMany({name,desc,price,type,imgurl})
        } else {
            res.send({"code":-1,"msg":"该菜品已存在"})
            return new Promise(()=>{})// 终止链式调用
        }
    })
    .then((arr)=>{
        res.send({"code":1,"msg":"添加成功"})
    })
    .catch((err)=>{
        res.send({"code":0,"msg":"添加失败"})
    })
})

/**
 * @api {post} /food/del 删除菜品
 * @apiGroup food
 *
 * @apiParam {String} name 菜品名称
 *
 * @apiSuccessExample 返回数据示例:
 * {
 *     "code": 1,
 *     "msg": "删除成功"
 * }
 */
router.post('/del',(req,res)=>{
    // 获取前端传递的参数
    let {name} = req.body
    // 删除一条数据
    foodModel.deleteOne({name})
    .then(()=>{
        res.send({"code":1,"msg":"删除成功"})
    })
    .catch(()=>{
        res.send({"code":0,"msg":"删除失败"})
    })
})

/**
 * @api {post} /food/update 编辑菜品
 * @apiGroup food
 *
 * @apiParam {String} originalname 菜品原始名称
 * @apiParam {String} name 菜品名称
 * @apiParam {String} desc 菜品描述
 * @apiParam {String} price 菜品价格
 * @apiParam {String} imgurl 菜品图片
 * @apiParam {String} type 菜品类型
 *
 * @apiSuccessExample 返回数据示例:
 * {
 *     "code": 1,
 *     "msg": "修改成功"
 * }
 */
router.post('/update',(req,res)=>{
    // 获取前端传递的参数
    let {originalname,name,desc,price,type,imgurl} = req.body
    // 修改数据库中的某条数据
    foodModel.updateOne({'name':originalname},{$set:{name,desc,price,type,imgurl}})
    .then(()=>{
        res.send({"code":1,"msg":"修改成功"})
    })
    .catch(()=>{
        res.send({"code":0,"msg":"修改失败"})
    })
})

/**
 * @api {post} /food/getpage 分页查询
 * @apiGroup food
 *
 * @apiParam {String} page 当前页码
 * @apiParam {String} size 每页条数
 *
 * @apiSuccessExample 返回数据示例:
 * {
 *     "code": 1,
 *     "msg": "查询成功",
 *     "data": [{...},{...},{...}],
 *     "count": 14,
 *     "pages": 5
 * }
 */
router.post('/getpage',(req,res)=>{
    // 获取前端传递的参数
    // page 当前要显示的页码
    // size 每一页的数据条数
    let {page,size} = req.body
    page = Number(page) || 1 // 页码默认为1
    size = Number(size) || 4 // 条数默认为4
    let pages = 0 // 数据总页数
    let count = 0 // 数据总条数
    //  查询所有数据
    foodModel.find()
    .then((arr)=>{
        count = arr.length
        pages = Math.ceil(count/size)
        // find() 查询所有数据
        // limit(n) 限制查询n条数据
        // skip(x) 跳过x条数据开始查询
        // 第1页: limit(4) skip(0)
        // 第2页: limit(4) skip(4)
        // 第3页: limit(4) skip(8)
        // 第n页: limit(size) skip((n-1)*size)
        // 查询指定条数的数据
        return foodModel.find().limit(size).skip((page-1)*size)
    })
    .then((arr)=>{
        res.send({"code":1,"msg":"查询成功","data":arr,count,pages})
    })
    .catch(()=>{
        res.send({"code":0,"msg":"查询失败","data":[]})
    })
})

/**
 * @api {post} /food/search 关键字查询
 * @apiGroup food
 *
 * @apiParam {String} word 搜索关键字
 *
 * @apiSuccessExample 返回数据示例:
 * {
 *     "code": 1,
 *     "msg": "查询成功",
 *     "data": [{...},{...},{...}]
 * }
 */
router.post('/search',(req,res)=>{
    // 获取前端传递的参数
    let {word} = req.body
    // 匹配 关键字 的正则
    // let reg = /word/ // 匹配 'word' 这个字符串
    let reg = new RegExp(word) // 匹配 word 这个变量
    // 查询数据
    // $or 逻辑或
    // {name:{$regex:reg}} 使用reg正则去匹配name的值
    foodModel.find({$or:[{name:{$regex:reg}},{desc:{$regex:reg}},{price:{$regex:reg}},{type:{$regex:reg}}]})
    .then((arr)=>{
        if (arr.length === 0) {
            res.send({"code":-1,"msg":"暂无数据","data":[]})
        } else {
            res.send({"code":1,"msg":"查询成功","data":arr})
        }
    })
    .catch((err)=>{
        res.send({"code":0,"msg":"查询失败","data":[]})
    })
})

// 导出路由表
module.exports = router
